﻿using Microsoft.EntityFrameworkCore;
using System.Linq;
using Umbraco.Core.Models.Entities;

namespace WebApplication1.Model
{
    public class test1context: DbContext
    {
        public test1context(DbContextOptions<test1context> options) : base(options)
        {

        }
        public virtual DbSet<t1> t1 { get; set; }

        /// <summary>
        /// 利用反射自动生成，不用一个个DbSet
        /// 注意：不能用于连接多个数据库，（如果需要连接，仔细斟酌where里面条件，或者另起一个model文件夹）注：本人不会
        /// 
        /// DbContext是域/实体类与数据库之间的桥梁。（可以和数据库通信，管理实体到数据库的映射模型，跟踪实体的更改。）
        /// 通过DbContext去连接数据库（和数据库通信），DbContext封装与数据库和数据模型相关的功能（管理实体到数据库的映射模型），依据数据实体状态创建SQL命令，将数据更改保存到数据库中（跟踪实体的更改）。
        /// DbSet用于增删改查操作的实体集 。DbSet是实体对象的集合，提供了实现CRUD的相应方法。
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            var Assembly=this.GetType().Assembly;
            var Types = Assembly.GetTypes().Where(m => m.FullName != null
                                                   && typeof(EntityBase).IsAssignableFrom(m)
                                                   && !m.IsAbstract
                                                   && m.Name != "EntityBase").ToArray();
            foreach (var entityType in Types)
            {
                modelBuilder.Entity(entityType);
            }
            modelBuilder.ApplyConfigurationsFromAssembly(Assembly);
            base.OnModelCreating(modelBuilder);
        }
    }
}
